package com.yootk.test.ftp;

import com.yootk.common.util.FTPConnection;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * FTP文件下载
 */
public class FTPDownloadFile {

    public static void main(String[] args) throws Exception {
        String ftpPath = "/home/ftpadmin/ftp/upload/"; // 此目录为Linux已经存在的路径，但是子路径不存在
        String fileName = "muyan_yootk.png"; // FTP文件名称
        FTPClient client = FTPConnection.getFTPClient(); // 获取FTP连接
        client.enterLocalPassiveMode(); // 采用被动模式
        client.setFileType(FTPClient.BINARY_FILE_TYPE); // 采用二进制传输
        client.setBufferSize(2048); // 设置上传的缓存大小
        if (client.changeWorkingDirectory(ftpPath)) { // 切换到要下载的FTP目录
            FTPFile[] files = client.listFiles(); // 获取全部的文件列表
            for (FTPFile file : files) {    // 迭代当前目录中的所有文件
                if (file.getName().trim().equalsIgnoreCase(fileName)) { // 找到了匹配的文件名称
                    // 为了可以区分出下载文件，本次进行一个强制性的命名
                    File downFile = new File("F:" + File.separator + "muyan" + File.separator + "yootk_download.png");
                    // 要通过FTP下载文件，是需要利用输出流进行输出写入的
                    OutputStream output = new FileOutputStream(downFile); // 获取文件流
                    boolean flag = client.retrieveFile(new String(file.getName().getBytes("UTF-8"), "ISO-8859-1"), output);
                    output.flush();
                    output.close();
                    System.out.println(flag ? "文件下载成功！" : "文件下载失败！");
                    // 删除FTP上的文件
                    client.deleteFile(new String(file.getName().getBytes("UTF-8"), "ISO-8859-1"));
                }
            }
        }
        client.logout(); // 注销
    }
}
